package ideen

import java.util.logging.Logger;
import src.de.checker.hochzeit.util.*;
import src.de.checker.hochzeit.domain.util.*;
import src.de.checker.hochzeit.domain.user.*;
import src.de.checker.hochzeit.domain.ideen.*;
import src.de.checker.hochzeit.konstanten.*
import com.google.appengine.api.datastore.*
import static com.google.appengine.api.datastore.FetchOptions.Builder.*

Logger log = Logger.getLogger('IdeenController');

if(session.getAttribute(Konstanten.SESSION_USER) != null)
{
	def user = session.getAttribute(Konstanten.SESSION_USER)


	if(params?.index ==~ /(?i)true/)
	{
		index()
	}
	if(params?.create ==~ /(?i)true/)
	{
		create()
	}
	if(params?.delete ==~ /(?i)true/)
	{
		delete()
	}
	if(params?.update ==~ /(?i)true/)
	{
		update()
	}
}
private void index()
{
	def query = new Query(Konstanten.IDEE)
	query.addSort("datum", Query.SortDirection.DESCENDING)
	query.addFilter("hochzeit", Query.FilterOperator.EQUAL, session.getAttribute(Konstanten.SESSION_USER).feier)
	PreparedQuery preparedQuery = datastore.prepare(query)
 	def entities = preparedQuery.asList( withLimit(300) )
	request['list'] = entities
	
    forward '/ideen/uebersicht.gtpl'
}
private void create()
{
	if(params.nachricht && !params.nachricht.equals(''))
	{
		try
		{
			def user = session.getAttribute(Konstanten.SESSION_USER)
	
			
			Vorschlag v = new Vorschlag();
			v.datum = Datehelper.getNow()
			v.user = user.key
			v.nachricht = params.nachricht
			v.von = user.anzeigename
			v.hochzeit = user.feier 
				
			Entity e2 = v as Entity
			e2.save()
		}
		catch(Exception e)
		{
			log.warning(e.toString())
		}
	}
	index()
	//forward '/gliste/show.gtpl'
}
private void delete()
{
	
	try
	{
		Key k = KeyFactory.stringToKey(params.key)
		def idee = datastore.get(k);
		
		if(idee.user == session.getAttribute(Konstanten.SESSION_USER).key)
		{
			
			log.info ('Lösche Vorschlag: '+idee+' [Gelöscht von: '+session.getAttribute(Konstanten.SESSION_USER)+"]")
			String message = 'Eintrag aus der Ideen-Ecke gelöscht: '+idee.key
			createTracer(Konstanten.TRACER_DELETE, message)
			idee.delete()
		}
		else
		{
			String message = 'Versuch einen Vorschlag aus den Ideen-Ecke zu löschen, der nicht der eigene ist: '+idee.key
			createTracer(Konstanten.TRACER_VERBOTEN, message)
			log.warning ('Versuch den Vorschlag zu Löschen: '+idee+' [Versuch von: '+session.user+", ist aber nicht der Eigentümer!]")
		}
	}
	catch(Exception e)
	{
		String message = 'Es wurde eine Idee zu löschen, das es nicht gibt. params.key: '+params.key 
		createTracer(Konstanten.TRACER_VERBOTEN, message)
		log.warning(e.toString())
		log.warning("ideen.delete(): Idee nicht gefunden zum löschen. Benutzer der gesucht hat: "+session.getAttribute(Konstanten.SESSION_USER))
	}
	redirect "/ideen"
}
private void update()
{
	def myuser = session.getAttribute(Konstanten.SESSION_USER)
	try
	{
		Key k = KeyFactory.stringToKey(params.key)
		def idee = datastore.get(k);
		
		if(idee.user == myuser.key)
		{
			idee.bearbeitet = Datehelper.getNow()
			idee.nachricht = params.nachrichtneu
			idee.save()
			log.info ('Update Vorschlag: '+idee+' [Update von: '+myuser+"]")
		}
		else
		{
			String message = 'Versuch einen Vorschlag aus den Ideen-Ecke zu updaten, der nicht der eigene ist: '+idee.key
			createTracer(Konstanten.TRACER_VERBOTEN, message)
			log.warning ('Versuch den Vorschlag zu aktualisieren: '+idee+' [Versuch von: '+myuser+", ist aber nicht der Eigentümer!]")
		}
	}
	catch(Exception e)
	{
		String message = 'Es wurde eine Idee zu updaten, das es nicht gibt. params.key: '+params.key 
		createTracer(Konstanten.TRACER_VERBOTEN, message)
		log.warning(e.toString())
		log.warning("ideen.update(): Idee nicht gefunden zum aktualisieren. Benutzer der gesucht hat: "+session.getAttribute(Konstanten.SESSION_USER))
	}
	redirect "/ideen"
}
private void createTracer(String message)
{
	createTracer(Konstanten.TRACER_FORGOT, message);
}
private void createTracer(String type, String message) {
	try
	{
		def myuser = session.getAttribute(Konstanten.SESSION_USER);

		Tracer t = new Tracer()
	    t.ipadresse = request.getRemoteAddr()
	    t.user = myuser.key
	    t.type = type
	    t.nachricht = message
	    t.datum = Datehelper.getNow()
	    Entity e2 = t as Entity
		e2.save()
	}
	catch(Exception e)
	{
		
	}
}